/**
 * 消费明细数据访问对象类
 * 业务层级：数据访问层
 * 功能说明：提供会员消费记录的数据库操作接口，包括消费记录查询、统计分析等
 * 架构关系：遵循四层架构设计，封装消费明细相关的数据库操作，为业务层提供消费数据服务
 */
#ifndef CONSUMPTIONDAO_H
#define CONSUMPTIONDAO_H

#include "../database/database.h"
#include <QString>
#include <QMap>
#include <QVariant>
#include <QVector>
#include <QDateTime>

class ConsumptionDAO
{
public:
    explicit ConsumptionDAO(Database *db);

    // 根据会员ID获取消费记录
    QVector<QMap<QString, QVariant>> getConsumptionByMemberId(int memberId);

    // 根据会员等级获取消费记录
    QVector<QMap<QString, QVariant>> getConsumptionByMemberLevel(int levelId);

    // 获取所有会员的消费记录
    QVector<QMap<QString, QVariant>> getAllConsumptionRecords();

    // 根据时间范围获取消费记录
    QVector<QMap<QString, QVariant>> getConsumptionByDateRange(const QDateTime &startDate, const QDateTime &endDate);

    // 根据会员ID和时间范围获取消费记录
    QVector<QMap<QString, QVariant>> getConsumptionByMemberAndDate(int memberId, const QDateTime &startDate, const QDateTime &endDate);

    // 获取会员消费统计信息
    QMap<QString, QVariant> getMemberConsumptionStats(int memberId);

    // 获取按等级分组的消费统计
    QVector<QMap<QString, QVariant>> getConsumptionStatsByLevel();

    // 获取消费记录详情（包含商品信息）
    QVector<QMap<QString, QVariant>> getConsumptionDetails(int orderId);

private:
    Database *m_db;

    // 构建基础查询SQL
    QString buildBaseConsumptionQuery() const;

    // 处理查询结果，添加计算字段
    void processConsumptionRecord(QMap<QString, QVariant> &record) const;
};

#endif // CONSUMPTIONDAO_H